package br.com.massai.model.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "MODULO", schema = "PORTAL")
@SequenceGenerator(name = "seqModulo", sequenceName = "seq_modulo", allocationSize = 1)
public class Modulo implements Serializable {
	
	private static final long serialVersionUID = 4144166913136101015L;

	@Id
	@Column(name = "ID_MODULO")
	@GeneratedValue(generator = "seqModulo", strategy = GenerationType.SEQUENCE)
	private Long id;
	
	@Column(name = "SIGLA", length = 30, columnDefinition = "VARCHAR(30)")
	private String sigla;
	
	@Column(name = "DESCRICAO", length = 100, columnDefinition = "VARCHAR(100)")
	private String descricao;
	
	@OneToOne
	@JoinColumn(name = "ID_MODULO_PAI", referencedColumnName = "ID_MODULO", nullable = true)
	private Modulo moduloPai;
	
	@OneToMany(mappedBy = "modulo", fetch = FetchType.LAZY)
	private List<Privilegio> privilegios;

	@OneToMany(mappedBy = "moduloPai", fetch = FetchType.LAZY)
	private List<Modulo> modulosFilhos;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getSigla() {
		return sigla;
	}

	public void setSigla(String sigla) {
		this.sigla = sigla;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Modulo getModuloPai() {
		return moduloPai;
	}

	public void setModuloPai(Modulo moduloPai) {
		this.moduloPai = moduloPai;
	}

	public List<Privilegio> getPrivilegios() {
		return privilegios;
	}

	public void setPrivilegios(List<Privilegio> privilegios) {
		this.privilegios = privilegios;
	}

	public List<Modulo> getModulosFilhos() {
		return modulosFilhos;
	}

	public void setModulosFilhos(List<Modulo> modulosFilhos) {
		this.modulosFilhos = modulosFilhos;
	}
}